In data networking, the Transmission Control Protocol (TCP) is a widely used transport layer network protocol for reliable data transmission and reception between two or more network devices. In TCP, data packets are acknowledged by the receiver so that the transmitter knows that the packets are received and can also retransmit any packets which are not received by the receiver.
The layered network model allows the different aspects of networks to be managed efficiently. The higher network layers such as the application layer are concerned with data sessions between network entities without having to worry about how the data actually gets to the other side. The lower network layers are concerned with delivery of the data packets and not their contents.
The Transport Control (TCP) Layer is a transport layer protocol located higher than the physical and data link layer but lower than the application layer. It is concerned with ensuring reliable delivery of data packets from a sender to receiver. TCP supports in packet reordering and retransmission of lost or corrupted data packets.
In TCP, the application layer payload is split between one or more TCP packets, each packet has a sequence number and the receiver is configured to acknowledge receipt of each packet so that the transmitter knows which packets have been successfully received. The receiver will determine whether any packets have been lost or corrupted and using explicit NACK responses, or inferring that a packet has been lost because an ACK response is not received, the transmitter will re-transmit missing packets.
Since the transmitter does not send new packets until the earlier transmitted packets are acknowledged, the TCP layer also allows a receiver to throttle a transmitter when the transmitter is sending packets at a greater rate than the receiver can receive packets into its receiver buffers.
TCP also includes flow control mechanisms so that data can be transmitted as quickly as possible without overwhelming the receiver so as to maintain a reliable connection. A Receiver Window Size (RWND) field is used by the receiver to indicate to the sender the amount of data that it is able to accept. The window size has an initial value but can change to a calculated value based on the bandwidth of a data link between the transmitter and receiver, and the round trip time (RTT). In addition, a TCP congestion control mechanism governs the behavior of the TCP data session in response to factors indicative of congestion on the data link. To avoid adding to a congested link, TCP is arranged to rapidly scale back the transmission rate of the transmitter when congestion is detected. Once the link conditions have improved, TCP will increase the transmission rate in accordance with a congestion policy such as Slow-Start, Congestion-Avoidance, Fast Recovery and Fast-Retransmit.
In recent times, in order to further improve resilience of a data connection between a transmitter and a receiver and to take account of other developments in data networking systems, Multi Path TCP (MPTCP) has been developed to allow data packets to take different data paths from a transmitter to a receiver. Since packets may arrive in a different order to the transmission order, receiver buffers are required to re-order the packets before delivery to an application layer.
One such multi path scenario is in the case of a mobile device having both WiFi and cellular connectivity such as LTE. Data packets can be transmitted from the mobile device using either the WiFi or LTE data paths to a destination. Furthermore, MPTCP can decide to send some packets via the WiFi interface and other packets via the cellular interface. The decision relating to which interface is used is dependent on the data path characteristics such as latency, packet loss and window size.
A problem with MPTCP is that it assumes that each data path is equally valid and therefore the selection of a path is only dependent on the data link characteristics. However, in some cases it is advantageous to bias the traffic towards a particular data path.